import multiprocessing
import time
def worker():
  name=multiprocessing.current_process().name
  print(name,'starting')
  time.sleep(2)
  print(name,'exiting')
def my_service():
  name=multiprocessing.current_process().name
  print(name,'starting')
  time.sleep(3)
  print(name,'exiting')
if __name__=='__main__':
  service=multiprocessing.Process(name='my_service',target=my_service)
  worker_1=multiprocessing.Process(name='worker_1',target=worker) # name='worker_1' 和 target=worker 都是使用了关键字参数的形式。这意味着无论它们在调用中的顺序如何，Python 都会正确地将 'worker_1' 分配给 name 参数，并将 worker 函数分配给 target 参数
  worker_2=multiprocessing.Process(target=worker)
  worker_1.start()
  worker_2.start()
  service.start()
  print("执行到这里")
  # 当你调用 worker_1.start()，操作系统开始准备 worker_1 子进程。这包括复制父进程的资源、分配新的PID等。
  # 同时，主程序不等待 worker_1 完成它的启动过程，而是继续执行，调用 worker_2.start() 和 service.start()，然后马上执行 print("执行到这里")。
  # 只有当主程序执行到 worker_1.join() 时，它才会等待 worker_1 子进程完成其任务。
  worker_1.join()
  worker_2.join()
  service.join()
  print("子进程结束")
